/**
 * 
 */
package pl.koziolekweb.translator.gui.controllers;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import pl.koziolekweb.translator.utilites.Context;

/**
 * 
 * Abstrakcyjny kontroler. Służy do wykonywania operacji na danych. Jest
 * implementacją {@link ActionListener} dzięki temu można ich używac w
 * elementach GUI.
 * 
 * @author koziolek
 * 
 */
public abstract class AbstractController implements ActionListener {

	private Context context;

	/**
	 * Uruchamia metodę {@link #procced(Context)}. Jeżeli kontekst nie został
	 * ustawiony to metoda nic nie robi (<b>return</b>).
	 * 
	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
	 */
	@Override
	public void actionPerformed(final ActionEvent e) {
		if (context == null) {
			return;
		}
		procced(context);
	}

	/**
	 * Ustawia {@link Context}
	 * 
	 * @param context
	 *            kontekst aplikacji
	 */
	public void setContext(final Context context) {
		this.context = context;
	}

	/**
	 * Metoda służy do przeprowadzania operacji na da nych. Nadpisz ją tworząc
	 * kontroler. Niepowinna być wywoływana bezpośrednio. Jest wywoływana w
	 * {@link #actionPerformed(ActionEvent)}
	 * 
	 * @param context
	 *            kontekst aplikacji. Ustawiany automatycznie.
	 */
	public abstract void procced(Context context);

}
